昨天的 Day23,我們完成了「LINE 詢價 → Odoo CRM 商機」的自動化流程:
✅ 客戶詢價 → AI 整理 → Odoo 新增商機 → LINE 回覆完成。
這樣的流程雖然省下大量人工輸入,但也出現一個問題:
👉 客戶被迫按照格式輸入,那這樣就直接填表單
就好啦,沒有用 LINE 的意義。
這種互動方式,雖然效率高,但體驗感卻「很機器化
」。
在我們原本的流程中,AI 每次只看單一句話 → 完全沒有上下文。
為了要讓客戶有像真人一樣的對話的機器人
所以今天的主題就是要來說:
👉 如何讓 AI 擁有「上下文記憶
」,打造更像真人的沉浸式對話式客服。
在昨天的流程裡,如果客戶是「一次性」輸入完整需求,AI 可以一次整理後新增商機。
但實際上,客戶的表達方式往往是 逐步輸入 或 邊想邊修改:
在我們原本的流程中,AI 只看單一句話 → 每次都當成一個新的需求。
結果就會出現:
👉 系統自動在 Odoo 建立了好幾張商機,而其實它們應該是「同一個商機的不同補充」。
這樣一來,業務在 Odoo 看到的畫面會是一堆重複、破碎的商機,還要花時間手動合併,反而降低效率
。
所以我們必須讓 AI 擁有「上下文記憶」,能夠根據完整對話紀錄來判斷客戶需求。
👉 這樣即使客戶一句一句輸入、甚至中途修改,AI 也能在最後輸出正確、完整的一張商機資料。
所以今天的目標就是讓 Make 中的 AI 擁有上下文的能力。
臺灣俗語說得好:「江湖一點訣,講破無價值」
今天要分享的這個方法,看似簡單,卻能徹底改變 AI 的判斷方式。
只要懂得這個訣竅,就能讓 AI 從「機器式客服」升級成「真人式客服」。
所以我現在就要來揭開,我到底是怎麼讓 Make 的 AI 擁有上下文的。
其實方法很簡單,就是把 Google Sheets 當作資料庫。
對!你沒聽錯,就是這麼樸實無華又簡單
因為 Make 在呼叫 Gemini 模組時,每一次都是「新對話」,沒有內建的上下文保存。
既然沒有內建,那我們就自己幫它建立一個資料庫,專門用來儲存對話。
👉 把每一段對話都寫進 Google Sheets,需要判斷時,再把整份紀錄丟給 AI。
看到這如果你覺得 「原來只是放到 Google Sheets 而已喔,我還以為是什麼很酷炫的技術,阿說白了,不就是在 Google Sheets Add a Row」
那我只能說:
你可能把重點放錯了,只看到了「Make 串接 Google Sheets 模組」這件事,那些都只是技術動作而已。
就像你知道資料庫新增資料是用 Create,吃飯是用筷子 —— 但重點是:資料庫怎麼設計?筷子怎麼用?這才是本質啊!
👉 所以讓AI擁有上下文的重點核心是:如何把 Google Sheets 設計成我們的資料庫。
因為 Make 的任務就是「把資料寫進去」,而上下文能不能運作,全靠 Google Sheets 的架構。
所以接下來我就來說明一下我的Google Sheets資料結構
line_uid
公司名稱
gmail
因為要跟我的 LINE 機器人進行服務的互動,前提就是「必須加入聯絡人」。
所以我以 「公司為單位」 來管理,確保每個使用者都能追溯到公司。
line_uid
、id (對話序號)
、對話訊息
、對話時間
一開始若不知道某個 line_uid
屬於哪間公司,會先建立一張「個人暫存表」儲存對話。
後續再依情況處理:
你可能會想問:「不能直接從 LINE 聊天室讀以前的訊息嗎?」
LINE 的 API 無法讀取過去的訊息,只能收到當下的新訊息。
👉 所以只要有訊息進來,我就必須要立刻儲存。否則以後是無法靠API取得對話紀錄。
首先,因為在Google Sheets中有Id的概念,所以一先從 Google Sheets 把某間公司的工作表資料全部讀出來,因為我們要知道這個 line_uid
已經有幾筆對話(用來計算 id
)。
新增 Make an API Call
說明一下設置:
URL:
spreadsheets/aaa/values/bbb!A1:Z1000
Google Sheets網址:
https://docs.google.com/spreadsheets/d/16xxxxxxcE3Gj1BJXh7vjjIS_zXOX4I5_mEzDKTIuUP8/edit?gid=5322620#gid=5322620
aaa
是你 Google Sheets 網址中間那段 IDbbb
是對應的工作表名稱,我這邊是公司的名字GET
,因為只是要讀取所以URL就會為
spreadsheets/16xxxxxxcE3Gj1BJXh7vjjIS_zXOX4I5_mEzDKTIuUP8/values/工作表名稱!A1:Z1000
接著把剛剛讀到的整張工作表內容交給 AI(Gemini)處理,請它幫我們找出有幾筆屬於這個 line_uid
的紀錄,並輸出對話數量。
這個步驟只是為了方便我們產生id的值
所以在這邊就新增一個Gemini,然後設定Prompt
從以下文字中找出對應的內容數量,並只輸出數量,不需要任何說明或多於文字。
文字:{{60.body}}
規則:
-核對欄位為:{{6.`0`}}
-核對 文字是否有核對欄位
-文字只須核對"values":[["line_uid","id","text","time"]後面的資訊
-只需輸出有核對欄位的總共數量,不要加上其他說明文字
範例1:
輸入:
核對欄位為:U574e754710efd36e309700699efc2f93
{"range":"U574e754710efd36e309700699efc2f93!A1:Z997","majorDimension":"ROWS","values":[["line_uid","id","text","time"],["U574e754710efd36e309700699efc2f93","1","嗨嗨","2025-05-22 16:40:29"],["U574e754710efd36e309700699efc2f93","2","嗨嗨","2025-05-22 16:41:26"],["55","1","你好","2025-05-22 16:41:26"],["654","2","你好安安","2025-05-22 16:41:26"],["U574e754710efd36e309700699efc2f93","3","哈囉","2025-05-22 16:41:26"]]}
輸出:
3
範例2:
輸入:
核對欄位為:U574e754710efd36e309700699efc2f93
{"range":"U574e754710efd36e309700699efc2f93!A1:Z997","majorDimension":"ROWS","values":[["line_uid","id","text","time"]]}
輸出:
0
最後一步就是把對話紀錄新增到 Google Sheets 中啦!
這邊不是用 Google Sheets 的 Add a Row
模組,而是使用 Make an API Call。
為什麼?
👉 Add a Row
模組只能選擇「固定的工作表」,無法依照變數動態切換。
但我們的需求是:
👉 根據用戶所屬的公司,自動將對話寫入該公司的工作表!
所以這邊就新增一個Google Sheets 的 Make an API Call模組
URL 範例如下:
spreadsheets/aaa/values/bbb:append?valueInputOption=USER_ENTERED
aaa
就一樣是Google Sheets網址中的那串IDbbb
則是工作表名稱POST
,因為要做儲存的動作,不是只有讀取了{"values":[[
"{{3.events[].source.userId}}",
"= {{trim(61.result)}}+1",
"{{3.events[].message.text}}",
"=TEXT((MID(\"{{3.events[].timestamp}}\",1,19)+0)+8/24,\"yyyy-mm-dd hh:mm:ss\")"
]]}
到這邊就完成對話紀錄的新增囉~
實測流程:
1️⃣ 輸入:「哈囉哈囉」
2️⃣ 系統把對話新增至 Google Sheets
3️⃣ 確認 Google Sheets 已新增對話紀錄
今天我們的任務不是讓 AI 看起來多聰明,
而是先幫它打造一個能「記住對話
」的腦袋 🧠
✅ 完成 Google Sheets 的上下文資料架構
✅ 解決 LINE API 無法查歷史訊息的限制
✅ 讓 AI 擁有記憶
這些設計,乍看只是把訊息寫進 Google Sheets,
但其實是為 AI 建立「理解前後脈絡
」的關鍵基礎。
簡單說 —— 今天不是讓客服變得更像真人,
而是幫它裝上一顆能記憶的腦。
📌 明天的 Day25 預告:
我們要正式啟動這顆腦袋:
👉 讓 AI 不只記得你說了什麼,
還能判斷哪裡沒說,主動引導、自然接話,真正實現沉浸式對話客服! 🚀